==C1/3E06 don't change palette of soldier sprite==
;available: C1/3E06 - C1/3E1E
 C1/3E06 80 17           BRA $3E1F       always use default pallete for character graphics

==C0/5370 link: set palette for sprite id at npc loading==
 C0/5370 20 BA 9C       JSR $9CBA

==C0/9CA9 event script - set palette==
;available space: (C0/9CA9 - C0/9CB9)
:setup offsets and variables
 C0/9CA9 20 F0 9D       JSR $9DF0       calculate offsets (include Y)
 C0/9CAC A5 EC          LDA $EC         opcode argument (palette)
 C0/9CAE 0A             ASL
 C0/9CAF 8D F8 1C       STA $1CF8       save formatted original palette
:set palette
 C0/9CB2 20 13 D6       JSR $D613       set palette
:advance queue
 C0/9CB5 A9 03          LDA #$03        number of bytes of opcode
 C0/9CB7 4C 5C 9B       JMP 9B5C        advance queue

==C0/9CBA set palette for sprite id at npc loading==
;available space: (C0/9CBA - C0/9CC9)
:original code
 C0/9CBA 99 79 08       STA $0879,Y     sprite ID
:save original palette
 C0/9CBD B9 80 08       LDA $0880,Y     original palette ID plus data
 C0/9CC0 29 0E          AND #$0E        isolate palette
 C0/9CC2 8D F8 1C       STA $1CF8       save by now
:change palette based on sprite ID
 C0/9CC5 20 13 D6       JSR $D613       set palette for sprite ID
:exit
 C0/9CC8 60             RTS

==C0/D613 JSR set palette for NPC==
 $1CF8 = original graphic palette (formatted)

:init
 C0/D613 DA             PHX
:check sprite ID
 C0/D614 B9 79 08       LDA $0879,Y     sprite ID
 C0/D617 C9 16          CMP #$16        max index for playable chars
 C0/D619 B0 09          BCS $D624       set original palette
:load and format new sprite palette         
 C0/D61B AA             TAX
 C0/D61C BF 2B CE C2    LDA $C2CE2B,X   palettes for battle chars
 C0/D620 0A             ASL             format bits
 C0/D621 8D F8 1C       STA $1CF8
:set upper body of sprite                        
 C0/D624 B9 80 08       LDA $0880,Y
 C0/D627 29 F1          AND #$F1
 C0/D629 0D F8 1C       ORA $1CF8
 C0/D62C 99 80 08       STA $0880,Y
:set lower body of sprite                        
 C0/D62F B9 81 08       LDA $0881,Y
 C0/D632 29 F1          AND #$F1
 C0/D634 0D F8 1C       ORA $1CF8
 C0/D637 99 81 08       STA $0881,Y
:exit
 C0/D63A FA             PLX
 C0/D63B 60             RTS

==load game screen - char setup==
:load game - oam
 C3/196C 20 E4 FF       JSR $FFE4       set char oam with battle palettes
 C3/196F 80 02          BRA $1973       continue normal code

==roster selection screen - char setup==
:roster selection - oam
 C3/7902 20 E4 FF       JSR $FFE4       set char oam with battle palettes
 C3/7905 80 02          BRA $7909       continue normal code
 
==shop menu screen - char setup==
:shop screen - oam
 C3/C0C1 20 E4 FF       JSR $FFE4       set char oam with battle palettes
 C3/C0C4 80 02          BRA $C0C8       continue normal code

==set char palette for oam characters==
:backup
 C3/FFE4 DA             PHX
 C3/FFE5 08             PHP
:original code
 C3/FFE6 BF 17 E9 D8    LDA $D8E917,X   OAM pointer based on sprite ID
 C3/FFEA 99 C9 32       STA $32C9,Y     save pointer
:adjust index for table of battle palettes
 C3/FFED 8A             TXA
 C3/FFEE 4A             LSR             X = X / 2
 C3/FFEF AA             TAX
:set palette for OAM object 
 C3/FFF0 E2 20          SEP #$20        8-bit A
 C3/FFF2 BF 2B CE C2    LDA $C2CE2B,X   palette ID for battle sprites
 C3/FFF6 18             CLC
 C3/FFF7 69 02          ADC #$02        adjust differences between OAM/battle palettes
 C3/FFF9 0A             ASL             format palette
 C3/FFFA 99 49 37       STA $3749,Y     save palette for oam object
:exit
 C3/FFFD 28             PLP
 C3/FFFE FA             PLX
 C3/FFFF 60             RTS
